//
//  GUserAccountViewModel.swift
//  sinaWeiBoAI
//
//  Created by Z.J on 16/3/22.
//  Copyright © 2016年 Z.J. All rights reserved.
//

import UIKit

class GUserAccountViewModel: NSObject {
    /// 单例
    static let sharedinstance : GUserAccountViewModel = GUserAccountViewModel()
    
    /// 账户信息
    var userAccount : GUserAccount?
    
    override init() {
        super.init()
        // 从沙盒里面加载数据
        userAccount = loadUserAccount()
    }
    /// 沙盒路径
    private let filePath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!.stringByAppendingString("/account.plist")

    /// 加载 access_token, post
    func loadAccessToken(code:String,completion:(error:NSError?)->())
    {
        // 获取accessToken的url
        let urlString = "https://api.weibo.com/oauth2/access_token"
        
        // 拼接参数-> 字典
        let parameters = [
            "client_id" : client_id,
            "client_secret" : client_secret,
            "grant_type" : "authorization_code",
            "code" : code,
            "redirect_uri" : redirect_uri
        ]
        
        GNetworkTool.sharedInstance.afnManager.POST(urlString, parameters: parameters, progress: nil, success: { (_, result) -> Void in// 1.NSURLSessionDataTask: task 2.响应结果
            // 将accessToken保存起来,下次直接拿来用,省得用户每次进入都需要登录
            if  let dict = result as? [String : AnyObject]
            {
                // 转化模型
                self.userAccount = GUserAccount.init(dict: dict)
                // 保存模型
                self.saveUserAccount()
                // 通知控制器保存成功
                completion(error:nil)
            }
            }) { (_, error) -> Void in  // 1.task 2.响应失败的原因
                // 返回错误信息
                completion(error:error)
        }
    }
    
    /// 保存模型到沙盒
    private func saveUserAccount()
    {
        if userAccount != nil
        {
            // 如果不为空->归档
            NSKeyedArchiver.archiveRootObject(userAccount!,toFile:filePath)
        }
    }
    
    /// 从沙盒中加载数据
    private func loadUserAccount()->GUserAccount?
    {
        // 得到存储对象
        let userAccount = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? GUserAccount
        // 如果加载出账号,需要判断accessToken是否过期
        // userAccount?.expiresDate和当前时间判断
        // NSDate()
        // userAccount?.expiresDate > NSDate() 表示没有过期
        // 测试过期时间1.让服务器返回一个过期时间来测试 2.改模拟器时间 3.重新给userAccount?.expiresDate?赋值
        // userAccount?.expiresDate = NSDate(timeIntervalSinceNow: -1000)
        if userAccount != nil &&
            
            userAccount?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending
        {
            return userAccount
        }
        return nil
    }
    
    
    
}
